# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/net/mscc,vsc7514-switch.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Microchip VSC7514 Ethernet switch controller

maintainers:
  - Vladimir Oltean <vladimir.oltean@nxp.com>
  - Claudiu Manoil <claudiu.manoil@nxp.com>
  - Alexandre Belloni <alexandre.belloni@bootlin.com>

description: |
  Bindings for the Microchip VSC7514 switch driver

  The VSC7514 switch driver handles up to 11 ports and can inject/extract
  packets using CPU. Additionally, PTP is supported as well as FDMA for faster
  packet extraction/injection.

allOf:
  - if:
      properties:
        compatible:
          const: mscc,vsc7514-switch
    then:
      $ref: ethernet-switch.yaml#
      required:
        - interrupts
        - interrupt-names
      properties:
        reg:
          minItems: 21
        reg-names:
          minItems: 21
        ethernet-ports:
          patternProperties:
            "^port@[0-9a-f]+$":
              $ref: ethernet-switch-port.yaml#
              unevaluatedProperties: false

  - if:
      properties:
        compatible:
          const: mscc,vsc7512-switch
    then:
      $ref: /schemas/net/dsa/dsa.yaml#
      properties:
        reg:
          maxItems: 20
        reg-names:
          maxItems: 20
        ethernet-ports:
          patternProperties:
            "^port@[0-9a-f]+$":
              $ref: /schemas/net/dsa/dsa-port.yaml#
              unevaluatedProperties: false

properties:
  compatible:
    enum:
      - mscc,vsc7512-switch
      - mscc,vsc7514-switch

  reg:
    minItems: 20
    items:
      - description: system target
      - description: rewriter target
      - description: qs target
      - description: PTP target
      - description: Port0 target
      - description: Port1 target
      - description: Port2 target
      - description: Port3 target
      - description: Port4 target
      - description: Port5 target
      - description: Port6 target
      - description: Port7 target
      - description: Port8 target
      - description: Port9 target
      - description: Port10 target
      - description: QSystem target
      - description: Analyzer target
      - description: S0 target
      - description: S1 target
      - description: S2 target
      - description: fdma target

  reg-names:
    minItems: 20
    items:
      - const: sys
      - const: rew
      - const: qs
      - const: ptp
      - const: port0
      - const: port1
      - const: port2
      - const: port3
      - const: port4
      - const: port5
      - const: port6
      - const: port7
      - const: port8
      - const: port9
      - const: port10
      - const: qsys
      - const: ana
      - const: s0
      - const: s1
      - const: s2
      - const: fdma

  interrupts:
    minItems: 1
    items:
      - description: PTP ready
      - description: register based extraction
      - description: frame dma based extraction

  interrupt-names:
    minItems: 1
    items:
      - const: ptp_rdy
      - const: xtr
      - const: fdma

required:
  - compatible
  - reg
  - reg-names
  - ethernet-ports

unevaluatedProperties: false

examples:
  # VSC7514 (Switchdev)
  - |
    switch@1010000 {
      compatible = "mscc,vsc7514-switch";
      reg = <0x1010000 0x10000>,
            <0x1030000 0x10000>,
            <0x1080000 0x100>,
            <0x10e0000 0x10000>,
            <0x11e0000 0x100>,
            <0x11f0000 0x100>,
            <0x1200000 0x100>,
            <0x1210000 0x100>,
            <0x1220000 0x100>,
            <0x1230000 0x100>,
            <0x1240000 0x100>,
            <0x1250000 0x100>,
            <0x1260000 0x100>,
            <0x1270000 0x100>,
            <0x1280000 0x100>,
            <0x1800000 0x80000>,
            <0x1880000 0x10000>,
            <0x1040000 0x10000>,
            <0x1050000 0x10000>,
            <0x1060000 0x10000>,
            <0x1a0 0x1c4>;
      reg-names = "sys", "rew", "qs", "ptp", "port0", "port1",
            "port2", "port3", "port4", "port5", "port6",
            "port7", "port8", "port9", "port10", "qsys",
            "ana", "s0", "s1", "s2", "fdma";
      interrupts = <18 21 16>;
      interrupt-names = "ptp_rdy", "xtr", "fdma";

      ethernet-ports {
        #address-cells = <1>;
        #size-cells = <0>;

        port0: port@0 {
          reg = <0>;
          phy-handle = <&phy0>;
          phy-mode = "internal";
        };
        port1: port@1 {
          reg = <1>;
          phy-handle = <&phy1>;
          phy-mode = "internal";
        };
      };
    };
  # VSC7512 (DSA)
  - |
    ethernet-switch@1{
      compatible = "mscc,vsc7512-switch";
      reg = <0x71010000 0x10000>,
            <0x71030000 0x10000>,
            <0x71080000 0x100>,
            <0x710e0000 0x10000>,
            <0x711e0000 0x100>,
            <0x711f0000 0x100>,
            <0x71200000 0x100>,
            <0x71210000 0x100>,
            <0x71220000 0x100>,
            <0x71230000 0x100>,
            <0x71240000 0x100>,
            <0x71250000 0x100>,
            <0x71260000 0x100>,
            <0x71270000 0x100>,
            <0x71280000 0x100>,
            <0x71800000 0x80000>,
            <0x71880000 0x10000>,
            <0x71040000 0x10000>,
            <0x71050000 0x10000>,
            <0x71060000 0x10000>;
            reg-names = "sys", "rew", "qs", "ptp", "port0", "port1",
            "port2", "port3", "port4", "port5", "port6",
            "port7", "port8", "port9", "port10", "qsys",
            "ana", "s0", "s1", "s2";

            ethernet-ports {
            #address-cells = <1>;
            #size-cells = <0>;

           port@0 {
            reg = <0>;
            ethernet = <&mac_sw>;
            phy-handle = <&phy0>;
            phy-mode = "internal";
          };
          port@1 {
            reg = <1>;
            phy-handle = <&phy1>;
            phy-mode = "internal";
          };
        };
      };

...
